﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using RESTServices.Dominio;
using System.Data.SqlClient;

namespace RESTServices.Persistencia
{
    public class EmpleadoDAO
    {
        public Empleado Crear(Empleado empleadoACrear)
        {
            Empleado empleadoNuevo = null;
            string sql = "INSERT INTO tb_empleado VALUES (@cod,@dni, @nom,@ape, @fecnac, @fono,@estado)";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", empleadoACrear.Codigo));
                    com.Parameters.Add(new SqlParameter("@dni", empleadoACrear.DNI));
                    com.Parameters.Add(new SqlParameter("@nom", empleadoACrear.Nombre));
                    com.Parameters.Add(new SqlParameter("@ape", empleadoACrear.Apellido));
                    com.Parameters.Add(new SqlParameter("@fecnac", empleadoACrear.FechaNacimiento));
                    com.Parameters.Add(new SqlParameter("@fono", empleadoACrear.Telefono));
                    com.Parameters.Add(new SqlParameter("@estado", empleadoACrear.Estado));
                    com.ExecuteNonQuery();
                }
            }
            empleadoNuevo = Obtener(empleadoACrear.Codigo);
            return empleadoNuevo;
        }

        public Empleado Obtener(int codigo)
        {
            Empleado empleadoExistente = null;
            string sql = "SELECT * FROM tb_empleado WHERE codEmpleado=@cod";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", codigo));
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        if (resultado.Read())
                        {
                            empleadoExistente = new Empleado()
                            {
                                Codigo = (int)resultado["codEmpleado"],
                                DNI=(int)resultado["dni"],
                                Nombre = (string)resultado["nombres"],
                                Apellido = (string)resultado["apellidos"],
                                FechaNacimiento = (string)resultado["fechaNacimiento"],
                                Telefono = (string)resultado["telefono"],
                                Estado=(int)resultado["estado"]
                            };
                        }
                    }
                }
            }
            return empleadoExistente;
        }

        public Empleado Modificar(Empleado empleadoAModificar)
        {
            Empleado empleadoModificado = null;
            string sql = "UPDATE tb_empleado SET dni=@dni,nombres=@nom,apellidos=@ape,fechaNacimiento=@fecnac,telefono=@tel,estado=@est WHERE codEmpleado=@cod";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", empleadoAModificar.Codigo));
                    com.Parameters.Add(new SqlParameter("@dni", empleadoAModificar.DNI));
                    com.Parameters.Add(new SqlParameter("@nom", empleadoAModificar.Nombre));
                    com.Parameters.Add(new SqlParameter("@ape", empleadoAModificar.Apellido));
                    com.Parameters.Add(new SqlParameter("@fecnac", empleadoAModificar.FechaNacimiento));
                    com.Parameters.Add(new SqlParameter("@tel", empleadoAModificar.Telefono));
                    com.Parameters.Add(new SqlParameter("@est", empleadoAModificar.Estado));
                    com.ExecuteNonQuery();
                }
            }
            empleadoModificado = Obtener(empleadoAModificar.Codigo);
            return empleadoModificado;
        }
        public void Eliminar(Empleado empleadoAEliminar)
        {
            string sql = "DELETE FROM tb_empleado WHERE codEmpleado=@cod";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    com.Parameters.Add(new SqlParameter("@cod", empleadoAEliminar.Codigo));
                    com.ExecuteNonQuery();
                }
            }
        }
        public List<Empleado> ListarTodos()
        {
            List<Empleado> empleadoExistentes = new List<Empleado>();
            Empleado empleadoExiste = null;
            string sql = "SELECT * FROM tb_empleado";
            using (SqlConnection con = new SqlConnection(ConexionUtil.Cadena))
            {
                con.Open();
                using (SqlCommand com = new SqlCommand(sql, con))
                {
                    using (SqlDataReader resultado = com.ExecuteReader())
                    {
                        while (resultado.Read())
                        {
                            empleadoExiste = new Empleado()
                            {
                                Codigo = (int)resultado["codEmpleado"],
                                DNI = (int)resultado["dni"],
                                Nombre = (string)resultado["nombres"],
                                Apellido = (string)resultado["apellidos"],
                                FechaNacimiento = (string)resultado["fechaNacimiento"],
                                Telefono = (string)resultado["telefono"],
                                Estado = (int)resultado["estado"]
                            };
                            empleadoExistentes.Add(empleadoExiste);
                        }
                    }
                }
            }
            return empleadoExistentes;
        }
    }
}